#include <linux/module.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/configfs.h>
#include <linux/kernel.h>
#include <linux/kobject.h>


//定义三个指针变量:
struct kobject *mykobject1;
struct kobject *mykobject2;
struct kobject *mykobject3;

//定义kobject_type结构体变量mytype
struct kobj_type mytype;

//模块初始化函数
static int mykobj_init(void)
{
    int ret;
    //创建kobject第一种方法

    //不指定父对象默认为sys/目录
    mykobject1 = kobject_create_and_add("mykobject1", NULL);
    //指定父目录为kobject1
    mykobject2 = kobject_create_and_add("mykobject2", mykobject1);

    
    //创建kobject 第二章方法
    
    // 1.kzalloc 分配内存
    mykobject3 = kzalloc(sizeof(struct kobject), GFP_KERNEL);
    // 2. 初始化并加入内核中去
    ret = kobject_init_and_add(mykobject3, &mytype, NULL, "%s", "mykobject3");
    

    return 0;

}


//模块退出函数
static void mykobj_exit(void)
{
    //释放创建的kobject对象
    kobject_put(mykobject1);
    kobject_put(mykobject2);
    kobject_put(mykobject3);

}


//指定模块初始化函数
module_init(mykobj_init);
//指定模块退出函数
module_exit(mykobj_exit);

MODULE_LICENSE("GPL");


